package com.atguigu.juc.study.chapter05.interrupt;

import java.util.concurrent.TimeUnit;

/**
 *      interrupt():实例方法，仅仅只是设置线程的中断状态为true，发起一个协商而不会立刻停止线程
 *      static interrupted():静态方法，判断线程是否被中断并清除当前中断状态，
 *          这个方法做了2件事：
 *              1.返回当前线程的中断状态，测试当前线程是否已被中断
 *              2.将当前线程的中断状态清零并重新设置为false，清除线程的中断状态
 *          此方法有点不好理解，如果连续2次调用此方法，则第2次调用将返回false，因为连续调用2次的结果可能不一样
 *      isInterrupted():实例方法，判断当前线程是否被中断(通过检查中断标志位)
 *
 *
 * @author : leimingchao
 * @date Date : 2022年06月12日 16:38
 */
public class InterruptDemo {

    static volatile boolean isStop = false;

    public static void main(String[] args) {

        new Thread(() -> {

            while (true) {
                if (isStop) {
                    System.out.println(Thread.currentThread().getName() + "\t isStop被修改为true，程序停止");
                    break;
                }
                System.out.println("---hello volatile");
            }

        }, "t1").start();

        try {
            TimeUnit.MILLISECONDS.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(() -> {
            isStop = true;
        }, "t2").start();
    }
}
